package com.tvunetworks.device.extra.service;

import com.github.pagehelper.PageInfo;
import com.tvunetworks.center.common.util.Result;
import com.tvunetworks.center.gs.model.Device;
import com.tvunetworks.device.extra.common.model.*;
import com.tvunetworks.device.extra.model.param.CheckSourceParam;
import com.tvunetworks.device.extra.model.param.RtmpSourceParam;

import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * @author Etan Yang
 * @create: 2021/11/22 18:25
 */

public interface SourceService {

    /**
     * Paging query source
     * @param param pageDeviceParam
     * @return Paging query source
     */
    Map<String, PageInfo<Device>> pageSource(PageDeviceParam param);

    /**
     * 分页查询用户下指定的设备
     *
     * @param param 参数
     * @return 返回分页查询结果
     */
    PageInfo<Device> pageDeviceOfUser(PageDeviceOfUserParam param);
    /**
     * 根据sourceId获取source的详细信息
     * @param peerId sourceId
     * @return source的详细信息
     */
    Device getById(String peerId);

    /**
     * 校验source是否正在被使用或者在channel服务被使用
     * @param param CheckSourceParam
     * @return sourceName
     */
    String checkSource(CheckSourceParam param);

    /**
     * 分页查询所有的source
     * @param param PageDeviceParam
     * @return 分页结果
     */
    PageInfo<Device> pageAllSource(PageDeviceParam param);

    /**
     * 接收两个设备peerid,操作配对并且开始live
     * @param param message
     * @throws   Exception 编译异常
     * @return  success
     */
    Result devicePairAndStartLive(PariOrRemoveAndStartOrStopLiveParam param) throws Exception;

    /**
     * 接收两个设备peerid,取消配对配对并且停止live
     * @param param message
     * @throws   Exception 编译异常
     * @return  success
     */
    Result deviceRemovePairAndStopLive(PariOrRemoveAndStartOrStopLiveParam param) throws Exception;

    /**
     * 获取RTMP url
     * @param param 参数
     * @return rtmp url
     */
    String getRtmpUrl(RtmpSourceParam param);

    /**
     * 获取RTMP的key
     *
     * @param param 参数
     * @return rtmp的key
     */
    String getRtmpKey(RtmpSourceParam param);

    /**
     * 根据userid 查询Channel,PP,CC的R
     * @param userId userId
     * @return rid集合
     */
    Result<Set<String>> getUserReceiver(String userId);

    /**
     * 根据用户id,获取用户下全部的R的信息
     * @param userId 用户id
     * @return R的device对象信息
     */
    Result<List<Device>> getDeviceByUserId(String userId);

    /**
     * 根据ObjectId,解析出sourceId,并配对,开启live
     * @param param param
     * @throws   Exception 编译异常
     * @return success
     */
    Result<String> startLiveByObjectId(ObjectIdStartLiveParam param) throws Exception;

    /**
     * 根据ObjectId,解析出sourceId,并停止lvie,和取消配对
     * @param param param
     * @return success
     */
    Result<String> stopLiveByObjectId(ObjectIdStopLiveParam param);
}
